package com.itheima.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.mapper.MemberMapper;
import com.itheima.pojo.Member;
import com.itheima.service.MemberService;
import com.itheima.utils.DateUtils;
import com.itheima.utils.MD5Utils;
import org.springframework.beans.factory.annotation.Autowired;

import java.text.SimpleDateFormat;
import java.util.*;

@Service(interfaceClass = MemberService.class)
public class MemberServiceImpl implements MemberService {

    @Autowired
    private MemberMapper memberMapper;

    @Override
    public Member findByTelephone(String telephone) {
        return memberMapper.findByTelephone(telephone);
    }

    @Override
    public void add(Member member) {

        //当添加一个会员的时候，对会员的登陆密码进行加密。
        if (member.getPassword()!=null){
            member.setPassword(MD5Utils.md5(member.getPassword()));
        }
        memberMapper.add(member);
    }

    /**
     * 通过过去12个月，每一个月的会员数量
     * @return
     */
    @Override
    public Map getMemberReport(Map maps) throws Exception {

        //开始月份
        String value1 = (String) maps.get("value1");
        //结束月份
        String value2 = (String) maps.get("value2");


        List<String> monthBetween = DateUtils.getMonthBetween(value1, value2, "yyyy-MM");


        //定义一个list集合，存放过去十二个月的每个月份
        ArrayList<String> months = new ArrayList<>();
        //定义一个list集合存放过去十二个月份每月的会员数量
        ArrayList<Integer> memberCounts = new ArrayList<>();
        //遍历过去的十二个月
        for (String s : monthBetween) {
            //获取月信息
            //Date date = DateUtils.parseString2Date(s,"yyyy-MM");

            //由于前端数据传输问题，月份都小一个月，在此将月份加一
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
            Calendar ct = Calendar.getInstance();
            ct.setTime(dateFormat.parse(s));
            ct.add(Calendar.MONTH,+1);
            String format = dateFormat.format(ct.getTime());
            //获取本月月份
            Date date = DateUtils.parseString2Date(format, "yyyy-MM");

            //获取每个月月份
            String month = new SimpleDateFormat("yyyy-MM").format(date);



            //定义每个月开始日期
            String monthBegin = month+"-1";
            //定义每个月结束时间
            String monthEnd = month+"-31";

            //统计每个月人数
            int count = memberMapper.findMemberCountByMonth(monthBegin,monthEnd);
            //添加每一个月
            months.add(month);

            //添加每一个月的会员数量
            memberCounts.add(count);
        }

        Map<String, List> map = new HashMap<>();
        map.put("moths",months);
        map.put("memberCounts",memberCounts);
        return map;
    }

    public static void main(String[] args) {
        //获取日历对象的实例
        Calendar calendar = Calendar.getInstance();
        //将日历对象中的日期往前推12个月
        calendar.add(Calendar.MONTH,-12);

        for (int i = 0; i < 12; i++) {
            //获取当前日历对象的时间
            Date time = calendar.getTime();
            String month = new SimpleDateFormat("yyyy-MM").format(time);
            System.out.println(month);
            calendar.add(Calendar.MONTH,+1);

        }



    }


    /*
        第三个饼图
     */
    public List<Map<String, Object>> findMemberAgeCount() {
        return memberMapper.findMemberAgeCount();
    }
}
